package com.ruoyi.sl.mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.ruoyi.sl.domain.SlReportDetail;
import com.ruoyi.sl.domain.SlWagesDay;
import com.ruoyi.sl.domain.SlWagesSettlementDays;
import com.ruoyi.sl.pojo.SlReportDetailQuery;
import com.ruoyi.sl.pojo.SlSinglePayQuery;
import org.apache.ibatis.annotations.Param;

/**
 * 日工资Mapper接口
 * 
 * @author admin
 * @date 2024-06-20
 */
public interface SlWagesDayMapper 
{

    //获取日期范围内出勤天数>=0.5的次数
    public BigDecimal selectMealAllowanceCountByUserAndDate(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("userName") String userName);

    /**
     * 查询日工资
     * 
     * @param wagesDayId 日工资主键
     * @return 日工资
     */
    public SlWagesDay selectSlWagesDayByWagesDayId(Long wagesDayId);

    //查询条件查询工资
    public List<SlWagesDay> selectSlWagesDayByQuery(SlSinglePayQuery slSinglePayQuery);

    /**
     * 查询日工资
     *
     * @param rfworkId 报工单ID
     * @param userName 用户名
     * @return 日工资
     */
    public SlWagesDay selectSlWagesDayByRfworkIdAndUser(@Param("rfworkId")Long rfworkId, @Param("userName")String userName);

    /**
     * 查询指定日期之间的所有人员薪资和出勤天数
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 日工资
     */
    public List<SlWagesDay> selectTotalWagesDayListByDate(@Param("startDate") Date startDate, @Param("endDate") Date endDate);


    /**
     * 查询指定日期之间的所有人员工资信息
     */
    public List<SlReportDetail> selectReportDetail(SlReportDetailQuery slReportDetailQuery);

    /**
     * 查询指定日期之间的所有零工人员工资信息
     */
    public List<SlReportDetail> selectOddjobReportDetail(SlReportDetailQuery slReportDetailQuery);

    /**
     * 查询特殊系数日工资列表
     *
     * @return 日工资集合
     */
    public List<SlReportDetail> selectSlWagesDayListByCoefficient(SlReportDetailQuery slReportDetailQuery);

    /**
     * 查询总出勤天数，总结算天数，和工资
     *
     * @param rfworkId 报工单ID
     * @param userName 用户名
     * @return 日工资
     */
    public SlWagesDay selectAttendanceReportDetail(@Param("rfworkId")Long rfworkId, @Param("userName")String userName);


    /**
     * 查询条件和日期查询工资总额和结算出勤总天数
     *
     * @param slWagesDay 参数
     * @return 日工资
     */
    public SlWagesSettlementDays selectTotalWagesDaysByUserAndType(SlWagesDay slWagesDay);


    /**
     * 查询日工资列表
     * 
     * @param slWagesDay 日工资
     * @return 日工资集合
     */
    public List<SlWagesDay> selectSlWagesDayList(SlWagesDay slWagesDay);


    /**
     * 查询计件日工资列表
     *
     * @param slWagesDay 日工资
     * @return 日工资集合
     */
    public List<SlWagesDay> selectSlWagesDayListByPiece(SlWagesDay slWagesDay);



    /**
     * 新增日工资
     * 
     * @param slWagesDay 日工资
     * @return 结果
     */
    public int insertSlWagesDay(SlWagesDay slWagesDay);

    /**
     * 修改日工资
     * 
     * @param slWagesDay 日工资
     * @return 结果
     */
    public int updateSlWagesDay(SlWagesDay slWagesDay);

    /**
     * 删除日工资
     * 
     * @param wagesDayId 日工资主键
     * @return 结果
     */
    public int deleteSlWagesDayByWagesDayId(Long wagesDayId);

    /**
     * 批量删除日工资
     * 
     * @param wagesDayIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSlWagesDayByWagesDayIds(Long[] wagesDayIds);

    //删除指定日期的工资记录
    public int deleteSlWagesDayByDate(@Param("workType") String workType,@Param("proDate") Date proDate);

    //根据报工单删除工资记录
    public int deleteSlWagesDayByRfworkId(Long rfworkId);



}
